home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / doors / amixpr / amicon.c next >
Encoding:
C/C++ Source or Header  |  1992-12-26  |  7.9 KB  |  326 lines

  1. #include <exec/types.h>
  2. #include <exec/exec.h>
  3. #include <exec/memory.h>
  4. #include <exec/ports.h>
  5. #include <libraries/dos.h>
  6. #include <devices/timer.h>
  7. #include <intuition/intuitionbase.h>
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include "work:romconf/doorheader.h"
  11. #include <functions.h>
  12. #define FOREVER for(;;)
  13. #define SM sendmessage
  14. #define HK hotkey
  15. #define PM prompt
  16. #define DROP Drop()
  17. extern void hotkey();
  18. extern void prompt();
  19. extern void showfile();
  20. extern void end();
  21. extern void getuserstring();
  22. extern void getuserdata();
  23. extern void showgfile();
  24. extern void sendmessage();
  25. extern void sendMessage();
  26. extern void Drop();
  27. extern void putuserstring();
  28. extern int LocalLog;
  29. VOID Register(int node);
  30. VOID ShutDown(VOID);
  31. VOID CloseOut();
  32. void getcmduserstring(char *ostring,int nl);
  33. struct MsgPort *CreatePrt(UBYTE *name,LONG pri);
  34. void getmaxuserstring(char *ostring,int nl);
  35. BOOL PutToPort(struct Message *);
  36. int Editfile(char Name[],int len);
  37. void ConOnly(char mstring[],int nl);
  38. struct MsgPort *port;
  39. struct MsgPort *replymp;
  40. struct JHMessage *Jhmsg,*msg;
  41. #define ANYKEY "press <RETURN> to continue"
  42.  
  43.  
  44. VOID Register(int node)
  45. {
  46.   ULONG portsig,signal;
  47.   LONG l;
  48.   BOOL foundport, ABORT= FALSE;
  49.   char PortName[80];
  50.   Jhmsg=(struct JHMessage *)AllocMem(sizeof(struct JHMessage),MEMF_PUBLIC);
  51.   
  52.  if(Jhmsg==0)
  53.   {
  54.      printf("Not enough Memory for message structure\n");
  55.      exit(30);
  56.   }
  57.   switch(node)
  58.   {
  59.     case 0: replymp=CreatePrt("DoorReplyPort0",0L);strcpy(PortName,"DoorReplyPort0"); break;
  60.     case 1: replymp=CreatePrt("DoorReplyPort1",0L);strcpy(PortName,"DoorReplyPort1"); break;
  61.     case 2: replymp=CreatePrt("DoorReplyPort2",0L);strcpy(PortName,"DoorReplyPort2"); break;
  62.     case 3: replymp=CreatePrt("DoorReplyPort3",0L);strcpy(PortName,"DoorReplyPort3"); break;
  63.     case 4: replymp=CreatePrt("DoorReplyPort4",0L);strcpy(PortName,"DoorReplyPort4"); break;
  64.     case 5: replymp=CreatePrt("DoorReplyPort5",0L);strcpy(PortName,"DoorReplyPort5"); break;
  65.     case 6: replymp=CreatePrt("DoorReplyPort6",0L);strcpy(PortName,"DoorReplyPort6"); break;
  66.     case 7: replymp=CreatePrt("DoorReplyPort7",0L);strcpy(PortName,"DoorReplyPort7"); break;
  67.     case 8: replymp=CreatePrt("DoorReplyPort8",0L);strcpy(PortName,"DoorReplyPort8"); break;
  68.     case 9: replymp=CreatePrt("DoorReplyPort9",0L);strcpy(PortName,"DoorReplyPort9"); break;
  69.   }
  70.   if(replymp==0)
  71.   {
  72.     printf("Couldn't create reply port\n");
  73.     FreeMem(Jhmsg,sizeof(struct JHMessage));
  74.     exit(30);
  75.   }
  76.   Jhmsg->Msg.mn_Node.ln_Type=NT_MESSAGE;
  77.   Jhmsg->Msg.mn_Length=sizeof(struct JHMessage);
  78.   Jhmsg->Msg.mn_ReplyPort=replymp;
  79.   strcpy(Jhmsg->String,PortName);
  80.   Jhmsg->Command=JH_REGISTER;
  81.   Jhmsg->Data=2;
  82.   Jhmsg->NodeID=-1;
  83.   Jhmsg->LineNum=0;
  84.   sprintf(PortName,"AEDoorPort%d",node);
  85.   while(!(port=FindPort(PortName)));
  86.   PutToPort((struct Message *)Jhmsg);
  87.  
  88.     portsig=1<<replymp->mp_SigBit;
  89.   
  90. Wait(portsig);
  91. msg=(struct JHMessage *)GetMsg((struct MsgPort *)replymp);
  92.  
  93. }
  94.  
  95. VOID ShutDown(VOID)
  96. {
  97.  ULONG portsig,usersig,signal;
  98.   BOOL foundport, ABORT= FALSE;
  99.  
  100.  portsig=1<<replymp->mp_SigBit;
  101.   Jhmsg->Command=JH_SHUTDOWN;
  102.   PutToPort((struct Message *)Jhmsg); 
  103.   signal=Wait(portsig);
  104.       while(msg=(struct JHMessage *)GetMsg((struct MsgPort *)replymp));
  105.        DeletePort((struct MsgPort *)replymp);
  106.        FreeMem(Jhmsg,sizeof(struct JHMessage));
  107. }
  108.  
  109. int Editfile(char Name[],int len)
  110.          strcpy(msg->String,Name);
  111.          msg->Command=JH_EF;
  112.          msg->Data=len;
  113.          PutToPort((struct Message *)Jhmsg); 
  114.          WaitPort(replymp);
  115.          GetMsg(replymp);
  116.          len=msg->Data;
  117.          if(msg->Data==-1) CloseOut();
  118.          return(len);
  119. }
  120.  
  121. BOOL PutToPort(struct Message *message)
  122. {
  123.   PutMsg(port,message);
  124.   return((BOOL)1);
  125. }
  126. /*void end()
  127. {
  128.  exit(0);
  129. }
  130. */
  131. void sendmessage(mstring,nl)
  132. char mstring[];
  133. int nl;
  134. {
  135.         register int counter;
  136.         char Temp[80];
  137.    
  138.         if(strlen(mstring)<80) sendMessage(mstring,0);
  139.         else
  140.         {
  141.           counter=0;
  142.           do
  143.           {
  144.             sprintf(Temp,"%.79s",&mstring[counter]);
  145.             sendMessage(Temp,0);
  146.             counter +=79;
  147.           }while(strlen(Temp)==79);
  148.         }
  149.         if(nl==1){ sendMessage("",1); Jhmsg->LineNum +=1; }
  150.         if(Jhmsg->LineNum==22)
  151.         { hotkey(ANYKEY,Temp); DROP;
  152.  SM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",0);
  153. SM("                          ",0);
  154. SM("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b",0);
  155. }
  156. }
  157. void ConOnly(char mstring[],int nl)
  158. {
  159.   Jhmsg->Data = nl;
  160.   Jhmsg->Command = JH_CO;
  161.   strcpy(Jhmsg->String,mstring);
  162.   PutToPort((struct Message *)Jhmsg);
  163.   (void)WaitPort(replymp);
  164.   (void)GetMsg(replymp);
  165. }
  166. void sendMessage(mstring,nl)
  167. char mstring[];
  168. int nl;
  169. {
  170.     Jhmsg->Data = nl;
  171.     Jhmsg->Command = JH_SM;
  172.     strcpy(Jhmsg->String,mstring);
  173.     PutToPort((struct Message *)Jhmsg);
  174.     (void)WaitPort(replymp);
  175.     (void)GetMsg(replymp);
  176. }
  177. void hotkey(mstring,ostring)
  178. char mstring[];
  179. char *ostring;
  180. {
  181.         Jhmsg->LineNum=0;
  182.     strcpy(Jhmsg->String,mstring);
  183.     Jhmsg->Command = JH_HK;
  184.     PutToPort((struct Message *)Jhmsg);
  185.     (void)WaitPort(replymp);
  186.     (void)GetMsg(replymp);
  187.     strcpy(ostring,Jhmsg->String);
  188. if(Jhmsg->Data==-1) CloseOut();
  189. }
  190.  
  191. void prompt(mstring,ostring,len)
  192. char mstring[];
  193. char *ostring;
  194. int len;
  195. {
  196.         len +=1;
  197.         Jhmsg->LineNum=0;
  198.     strcpy(Jhmsg->String,mstring);
  199.     Jhmsg->Data=len;
  200.     Jhmsg->Command = JH_PM;
  201.     PutToPort((struct Message *)Jhmsg);
  202.     (void)WaitPort(replymp);
  203.     (void)GetMsg(replymp);
  204.     strcpy(ostring,Jhmsg->String);
  205. if(Jhmsg->Data==-1) CloseOut();
  206. }
  207. void showfile(mstring)
  208. char mstring[];
  209. {
  210.     strcpy(Jhmsg->String,mstring);
  211.     Jhmsg->Command = JH_SF;
  212.     PutToPort((struct Message *)Jhmsg);
  213.     (void)WaitPort(replymp);
  214.     (void)GetMsg(replymp);
  215. }
  216. void showgfile(mstring)
  217. char mstring[];
  218. {
  219.     strcpy(Jhmsg->String,mstring);
  220.     Jhmsg->Command = JH_SG;
  221.     PutToPort((struct Message *)Jhmsg);
  222.     (void)WaitPort(replymp);
  223.     (void)GetMsg(replymp);
  224. }
  225.  
  226. void getuserdata(int which,int *odata)
  227. {
  228.    long Dtimelimit,TimeUsed;
  229.    switch(which)
  230.    {
  231.      case 6: *odata=1; break;
  232.      case 7:
  233.         Jhmsg->Command=DT_TIMELIMIT; Jhmsg->Data=READIT;
  234.  PutToPort((struct Message *)Jhmsg);
  235.     (void)WaitPort(replymp);
  236.     (void)GetMsg(replymp);
  237.         Dtimelimit=atol(Jhmsg->String);
  238.      Jhmsg->Command=DT_TIMEUSED; Jhmsg->Data=READIT;
  239.  PutToPort((struct Message *)Jhmsg);
  240.     (void)WaitPort(replymp);
  241.     (void)GetMsg(replymp);
  242.         TimeUsed=atol(Jhmsg->String);
  243.  
  244.         *odata=(int)((Dtimelimit-TimeUsed)/60L); 
  245.         break;
  246.    }
  247. }
  248. void getuserstring(char *ostring,int nl)
  249. {
  250.         Jhmsg->Command = nl;
  251.         Jhmsg->Data=READIT;
  252.     PutToPort((struct Message *)Jhmsg);
  253.     (void)WaitPort(replymp);
  254.     (void)GetMsg(replymp);
  255.    strcpy(ostring,Jhmsg->String);
  256. }
  257. void getcmduserstring(char *ostring,int nl)
  258. {
  259.         strcpy(Jhmsg->String,ostring);
  260.         Jhmsg->Command = nl;
  261.         Jhmsg->Data=READIT;
  262.     PutToPort((struct Message *)Jhmsg);
  263.     (void)WaitPort(replymp);
  264.     (void)GetMsg(replymp);
  265.    strcpy(ostring,Jhmsg->String);
  266. }
  267. void putuserstring(char *ostring,int nl)
  268. {
  269.         Jhmsg->Command = nl;
  270.         Jhmsg->Data=WRITEIT;
  271.         strcpy(Jhmsg->String,ostring);
  272.     PutToPort((struct Message *)Jhmsg);
  273.     (void)WaitPort(replymp);
  274.     (void)GetMsg(replymp);
  275.  
  276. }
  277.  
  278. void Drop()
  279. {
  280. }
  281. void getmaxuserstring(char *ostring,int nl)
  282. {
  283.   return;
  284. }
  285. struct MsgPort *CreatePrt(UBYTE *name,LONG pri)
  286. {
  287.   int sigBit;
  288.   struct MsgPort *mp;
  289.   
  290.   if((sigBit=AllocSignal(-1L))==-1)
  291.     return(NULL);
  292.   mp=(struct MsgPort *)
  293.      AllocMem((ULONG)sizeof(struct MsgPort),(ULONG)MEMF_CLEAR|MEMF_PUBLIC);
  294.   if(!mp)
  295.   {
  296.     FreeSignal(sigBit);
  297.     return(NULL);
  298.   }
  299.   mp->mp_Node.ln_Name=name;
  300.   mp->mp_Node.ln_Pri=pri;
  301.   mp->mp_Node.ln_Type=NT_MSGPORT;
  302.   mp->mp_Flags=PA_SIGNAL;
  303.   mp->mp_SigBit=sigBit;
  304.   mp->mp_SigTask=(struct Task *)FindTask(0L);
  305.   if(name)
  306.     AddPort(mp);
  307.   else
  308.     NewList(&(mp->mp_MsgList));
  309.   return(mp);
  310. }
  311.  
  312.  
  313. void FlagFile(char *string)
  314. {
  315.    strcpy(Jhmsg->String,string);
  316.     Jhmsg->Command = JH_FLAGFILE;
  317.     PutToPort((struct Message *)Jhmsg);
  318.     (void)WaitPort(replymp);
  319.     (void)GetMsg(replymp);
  320. }
  321. VOID CloseOut()
  322. {
  323.   ShutDown();
  324.   end();
  325. }